/*
//  KRATOS  _____________
//         /  _/ ____/   |
//         / // / __/ /| |
//       _/ // /_/ / ___ |
//      /___/\____/_/  |_| Application
//
//  Main authors:   Thomas Oberbichler
*/

#include "iga_application_variables.h"

namespace Kratos
{

KRATOS_CREATE_VARIABLE(double, CROSS_AREA)
  
KRATOS_CREATE_VARIABLE(double, TRUSS_PRESTRESS_CAUCHY)
KRATOS_CREATE_VARIABLE(double, TRUSS_PRESTRESS_PK2)
KRATOS_CREATE_VARIABLE(double, TRUSS_STRESS_CAUCHY)
KRATOS_CREATE_VARIABLE(double, TRUSS_STRESS_PK2)
KRATOS_CREATE_VARIABLE(double, TRUSS_FORCE)
KRATOS_CREATE_VARIABLE(double, TANGENT_MODULUS)
KRATOS_CREATE_VARIABLE(double, TRUSS_GREEN_LAGRANGE_STRAIN)

KRATOS_CREATE_VARIABLE(double, PRESTRESS_CAUCHY)
KRATOS_CREATE_SYMMETRIC_2D_TENSOR_VARIABLE_WITH_COMPONENTS(PRESTRESS)
KRATOS_CREATE_VARIABLE(Vector, TANGENTS)

KRATOS_CREATE_VARIABLE(double, CROSS_SECTIONAL_ROTATION)

KRATOS_CREATE_VARIABLE(double, FORCE_PK2_1D)
KRATOS_CREATE_VARIABLE(double, FORCE_CAUCHY_1D)
KRATOS_CREATE_VARIABLE(double, PRINCIPAL_STRESS_1)
KRATOS_CREATE_VARIABLE(double, PRINCIPAL_STRESS_2)

KRATOS_CREATE_VARIABLE(Matrix, LOCAL_ELEMENT_ORIENTATION)
KRATOS_CREATE_3D_VARIABLE_WITH_COMPONENTS(LOCAL_PRESTRESS_AXIS_1)
KRATOS_CREATE_3D_VARIABLE_WITH_COMPONENTS(LOCAL_PRESTRESS_AXIS_2)

KRATOS_CREATE_3D_VARIABLE_WITH_COMPONENTS(NODAL_INERTIA)
KRATOS_CREATE_VARIABLE(double, RAYLEIGH_ALPHA)
KRATOS_CREATE_VARIABLE(double, RAYLEIGH_BETA)

// 5p Director Shell Variables
KRATOS_CREATE_VARIABLE(bool, DIRECTOR_COMPUTED)
KRATOS_CREATE_VARIABLE(Vector, DIRECTOR)
KRATOS_CREATE_3D_VARIABLE_WITH_COMPONENTS(DIRECTORINC)
KRATOS_CREATE_3D_VARIABLE_WITH_COMPONENTS(MOMENTDIRECTORINC)
KRATOS_CREATE_VARIABLE(Matrix, DIRECTORTANGENTSPACE)
KRATOS_CREATE_3D_VARIABLE_WITH_COMPONENTS(MOMENT_LINE_LOAD)

//Load Condition Variables
KRATOS_CREATE_3D_VARIABLE_WITH_COMPONENTS(POINT_LOAD)
KRATOS_CREATE_3D_VARIABLE_WITH_COMPONENTS(LINE_LOAD)
KRATOS_CREATE_3D_VARIABLE_WITH_COMPONENTS(SURFACE_LOAD)

KRATOS_CREATE_3D_VARIABLE_WITH_COMPONENTS(DEAD_LOAD)
KRATOS_CREATE_VARIABLE(double, PRESSURE_FOLLOWER_LOAD)

KRATOS_CREATE_VARIABLE(double, CURVATURE)

//Stress Recovery Variables
KRATOS_CREATE_SYMMETRIC_2D_TENSOR_VARIABLE_WITH_COMPONENTS(PK2_STRESS)
KRATOS_CREATE_SYMMETRIC_2D_TENSOR_VARIABLE_WITH_COMPONENTS(CAUCHY_STRESS)
KRATOS_CREATE_SYMMETRIC_2D_TENSOR_VARIABLE_WITH_COMPONENTS(CAUCHY_STRESS_TOP)
KRATOS_CREATE_SYMMETRIC_2D_TENSOR_VARIABLE_WITH_COMPONENTS(CAUCHY_STRESS_BOTTOM)
KRATOS_CREATE_SYMMETRIC_2D_TENSOR_VARIABLE_WITH_COMPONENTS(MEMBRANE_FORCE)
KRATOS_CREATE_SYMMETRIC_2D_TENSOR_VARIABLE_WITH_COMPONENTS(INTERNAL_MOMENT)
KRATOS_CREATE_VARIABLE(Vector, DIVERGENCE_STRESS)

KRATOS_CREATE_VARIABLE(double, SHEAR_FORCE_1)
KRATOS_CREATE_VARIABLE(double, SHEAR_FORCE_2)

// Control parameters of conservative or non-conservative integration
KRATOS_CREATE_VARIABLE(bool, INTEGRATE_CONSERVATIVE)

//Penalty Variables
KRATOS_CREATE_VARIABLE(double, PENALTY_FACTOR)
KRATOS_CREATE_3D_VARIABLE_WITH_COMPONENTS(VECTOR_LAGRANGE_MULTIPLIER_REACTION)

//Nitsche Variables
KRATOS_CREATE_VARIABLE(double, NITSCHE_STABILIZATION_FACTOR)
KRATOS_CREATE_VARIABLE(int, EIGENVALUE_NITSCHE_STABILIZATION_SIZE)
KRATOS_CREATE_VARIABLE(Vector, EIGENVALUE_NITSCHE_STABILIZATION_VECTOR)
KRATOS_CREATE_VARIABLE(int, BUILD_LEVEL)

// SBM Variables 
KRATOS_CREATE_VARIABLE(Matrix, INTEGRATION_POINTS)
KRATOS_CREATE_VARIABLE(Vector, INTEGRATION_WEIGHTS)
KRATOS_CREATE_VARIABLE(std::string, BOUNDARY_CONDITION_TYPE)
KRATOS_CREATE_VARIABLE(std::string, CONDITION_NAME)
KRATOS_CREATE_VARIABLE(std::string, LAYER_NAME)
KRATOS_CREATE_VARIABLE(Vector, KNOT_VECTOR_U)
KRATOS_CREATE_VARIABLE(Vector, KNOT_VECTOR_V)
KRATOS_CREATE_VARIABLE(Vector, KNOT_VECTOR_W)
KRATOS_CREATE_VARIABLE(Vector, KNOT_SPAN_SIZES)
KRATOS_CREATE_VARIABLE(std::vector<Vector>, PARAMETER_SPACE_CORNERS)
KRATOS_CREATE_VARIABLE(Node::Pointer, PROJECTION_NODE)
KRATOS_CREATE_VARIABLE(typename std::vector<Geometry<Node>::Pointer>, NEIGHBOUR_GEOMETRIES)
KRATOS_CREATE_VARIABLE(int, PROJECTION_NODE_ID)
KRATOS_CREATE_VARIABLE(std::vector<std::string>, CONNECTED_LAYERS)
KRATOS_CREATE_VARIABLE(std::vector<std::string>, CONNECTED_CONDITIONS)

} // namespace Kratos
